home *** CD-ROM | disk | FTP | other *** search
-
-
-
-
-
- MIDAS Sound System v0.40 revision A
- -----------------------------------
-
- Copyright 1995 Petteri Kangaslampi and Jarno Paananen
-
-
-
- MIDAS SOUND SYSTEM IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
- EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES
- OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT
- WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES
- CAUSED BY THE USE OR INABILITY TO USE, OF MIDAS SOUND SYSTEM.
-
- MIDAS Sound System may only be used, distributed and modified under
- the terms of the MIDAS Sound System license, LICENSE.TXT. By
- continuing to use, modify or distribute MIDAS Sound System you
- indicate that you have read the license and understand and accept it
- fully. If you do not have the license or have problems understanding
- it or fulfilling its requirements you must contact us.
-
- MIDAS Sound System may freely be distributed as long as no money is
- charged for it, and no attempt is made to restrict further copying,
- distribution and using of MIDAS Sound System. It may not be used in
- any commercial applications, including shareware, and may not be
- included as part of a commercial publication or software package.
- Separate commercial licensing is available.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- MIDAS Sound System Getting Started Page 2
-
-
- 1. Getting Started
-
- ----------------------------------------------------------------------------
- 1.1. Foreword
- ----------------------------------------------------------------------------
-
- This is the third public version of MIDAS Sound System, and, as the
- version number suggests, not fully finished. Most importantly, there
- is very little documentation, apart from this file, which you should
- read through before proceeding. Numerous examples have been added from
- the previous version and the code has been made much cleaner. Still
- this release is, like the two previous ones, intended for experienced
- programmers only. The best source for learning to use MIDAS Sound
- System is the source code, so take a good look at the example
- programs, experiment with them and modify them. Also the MIDAS Sound
- System source code should be clean and readable and includes a lot of
- information on how to use the various features of MIDAS Sound System
- and how it works.
-
- ----------------------------------------------------------------------------
- 1.2. Requirements
- ----------------------------------------------------------------------------
-
- MIDAS Sound System requires an Intel 80386 compatible processor, MS-
- DOS 5.0 or above (untested below 5.0, might work). EMS memory is used
- if found, and this decreases conventional memory requirements
- dramatically, although at the expense of speed. To fully recompile
- MIDAS Sound System you need Borland Turbo Assembler 4.0, Borland C 3.1
- or Watcom C 10.0, and Borland Pascal 7 if you work in Pascal. Other C
- compilers can be used fairly easily as well, at least other versions
- of Borland and Watcom compilers. MIDAS Sound System v0.40 can be used
- with any of those compilers alone, with a suitable linker, and
- normally there should be no need to recompile the library.
-
- ----------------------------------------------------------------------------
- 1.3. Compiling the examples
- ----------------------------------------------------------------------------
-
- 1.3.1. Borland C
-
- The Borland C examples are in the C_EXP\ subdirectory. To compile them
- you need the Borland C command-line compiler, bcc, Borland make and
- Borland large model runtime libraries. You also need to edit the make
- script bc_exp.mak to reflect your system settings, mainly the MIDAS
- Sound System directory in the beginning of the file. After this run
- "make -fbc_exp.mak" to compile the examples.
-
- 1.3.2. Watcom C
-
- The Watcom C examples are in the C_EXP\ subdirectory, and are the same
- as the Borland C examples except for the make script. To compile them
- you need the Watcom 16-bit C compile and link utility, wcl, Watcom
- make and Watcom large model runtime libraries. You also need to edit
- the make script wc_exp.mak to reflect your system settings, mainly the
- MIDAS Sound System directory in the beginning of the file. After this
- run "wmake -u -f bc_exp.mak" to compile the examples.
-
-
-
-
-
-
- MIDAS Sound System Getting Started Page 3
-
-
- Included in this version of MIDAS Sound System is also the full source
- code for our The Party '94 intro competition entry, Live, in the
- subdirectory LIVE\. It is not meant to be an example of good demo
- coding, but rather an example on how to use MIDAS Sound System,
- including music synchronization and screen synchronized timer. Live
- can be compiled using Watcom C16 and Borland Turbo Assembler. Edit
- "makefile" and "live.wlk" to correspond to your system, and compile
- using "wmake -u".
-
- 1.3.3. Borland Pascal
-
- The Borland Pascal examples are in the PAS_EXP\ subdirectory. To
- compile them you need Borland Pascal 7 command line compiler, bpc,
- Borland make and the standard BP7 units. You need to copy the files
- from the correct subdirectory to the main MIDAS directory before
- compiling. You also need to edit the make scripts rm_exp.mak and
- pm_exp.mak to reflect your system settings, mainly the MIDAS Sound
- System directory. After this run "make -frm_exp.mak" to compile the
- real mode or "make -fpm_exp.mak" the protected mode examples.
-
- 1.3.4. Borland Turbo Assembler
-
- The Assembler examples are in the ASM_EXP\ subdirectory. To compile
- them you need Borland Turbo Assembler, probably version 4.0, Borland
- make and Borland Turbo Link. You also need to edit the make script
- makefile to reflect your system settings, mainly the MIDAS Sound
- System directory. After this run "make" to compile the examples.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- MIDAS Sound System Using MIDAS Sound System Page 4
-
-
- 2. Using MIDAS Sound System
-
- ----------------------------------------------------------------------------
- 2.1. MIDAS Sound System Libraries
- ----------------------------------------------------------------------------
-
- Precompiled libraries are included in this release for Borland C,
- Watcom C16, Borland Pascal 7 (real and protected mode) and Borland
- Turbo Assembler. C and Assembler libraries are included in the MIDAS
- Sound System main directory, and unit and object files for the Pascal
- version are in different subdirectories.
-
- We have now also included cut-down versions of the MIDAS libraries.
- They are intended to be used in small applications such as demos, for
- playing .MM modules only (see below). From the cut-down libraries all
- module loading routines are removed as well as configuration load/save
- routines and some other unnecessary routines to decrease the size of
- MIDAS Sound System. Further space can be saved by recompiling the
- libraries with no stereo support (define NOSTEREO) or by removing
- unnecessary sound card support.
-
- The libraries included are:
-
- midasbc.lib Borland C/C++ full library
- midaswc.lib Borland C/C++ cut-down library
- midaswc.lib Watcom C/C++ 16 full library
- mcutwc.lib Watcom C/C++ 16 cut-down library
- midasasm.lib Turbo Assembler full library
- mcutasm.lib Turbo Assembler cut-down library
-
- To use the Borland Pascal version, copy the units and object files
- from the correct subdirectory to the main MIDAS directory. The
- directories are:
-
- BPFULLRM\ Borland Pascal Real Mode full version
- BPCUTRM\ Borland Pascal Real Mode cut-down version
- BPFULLPM\ Borland Pascal Protected Mode full version
- BPCUTPM\ Borland Pascal Protected Mode cut-down version
-
- ----------------------------------------------------------------------------
- 2.2. Compiling MIDAS Sound System
- ----------------------------------------------------------------------------
-
- The full source code for MIDAS Sound System is included in the SRC\
- subdirectory. You can use it to recompile any version of the
- libraries. The source code subdirectory also includes make scripts
- for compiling all the libraries, look for files with extension ".mak".
- Note that you will need to modify the make scripts to get them work,
- possibly quite extensively if you are not using exactly the same
- compilers as we do. The make scripts also contain information on how
- to compile the cut-down version of the libraries. In general,
- recompiling MIDAS may be difficult simple and we suggest it only for
- experienced programmers.
-
- Note also that if you only have modified a part of the MIDAS Sound
- System library, you can extract the other modules from the suitable
-
-
-
-
-
-
- MIDAS Sound System Using MIDAS Sound System Page 5
-
-
- library before recompiling. For example, if you have modified from the
- assembler library mmem.asm and do not have a C compiler, you can
- extract all object modules from midasasm.lib, copy them to the source
- code directory, delete mmem.asm and run "make -fmasmlib.mak". A
- similar procedure can be used with all the libraries. Likewise, you
- can copy all object files from a suitable Borland Pascal directory if
- you are working in Pascal.
-
- ----------------------------------------------------------------------------
- 2.3. .MM Modules
- ----------------------------------------------------------------------------
-
- This version of MIDAS Sound System includes support for .MM modules.
- The .MM format is basically a sequence of MIDAS Sound System internal
- structures dumped one after another on the disk, and is therefore very
- easy to handle. To play .MM modules you simply have to load the whole
- module as one big chunk to memory or link it to the executable and
- call midasPrepareMM() with a pointer to the module and the Module
- Player used. After this the module can be handled as any module loaded
- with midasLoadModule(). The idea behind this is to be able to remove
- all module loading routines and file handling, resulting in smaller
- executables. You can convert any Protracker, Scream Tracker 3 or
- Multitracker module that MIDAS handles to a .MM module using the
- enclosed MOD2MM converter. To fully benefit from using .MM modules you
- should use the cut-down versions of the MIDAS libraries.
-
- Note that midasPrepareMM() does not work with .MM files over 64kb in
- protected mode, and you may have problems loading over 64kb files in
- Borland Pascal real mode as well. The file handling in the Borland
- Pascal libraries does not support reading or writing blocks over 64kb
- as such memory blocks can not be allocated under Borland Pascal.
-
- ----------------------------------------------------------------------------
- 2.4. Assembly Language Considerations
- ----------------------------------------------------------------------------
-
- For the first time MIDAS Sound System now supports programming in pure
- assembly language. The examples in the ASM_EXP\ directory should be
- enough to show you how to use the basic features of MIDAS Sound System
- in assembler. You can also look at the C and Pascal examples, as all
- the features are also available in assembler. There are a few special
- points worth mentioning about using MIDAS Sound System with assembler,
- however.
-
- All MIDAS Sound System include files assume that Turbo Assembler is in
- IDEAL mode. Therefore you must keep the compiler in IDEAL mode at
- least during the inclusion. See the example source code for an example
- of a proper start of a program file.
-
- MIDAS Sound System requires that the MIDAS Startup code is run at the
- beginning of the program. It reallocates the program memory block so
- that DOS memory allocation can be used and transfers control to a
- label "main", which must be global. If your program requires control
- at startup you must rewrite the MIDAS startup code, mstartup.asm.
- mstartup.obj must be the first object file passed to the linker to
- ensure it will be used as startup code.
-
-
-
-
-
-
- MIDAS Sound System Using MIDAS Sound System Page 6
-
-
- MIDAS Sound System for assembler is compiled in "MODEL LARGE,C" and
- uses C calling convention for all parameter passing. Because of this
- you should keep all of your own code that uses MIDAS in "MODEL
- LARGE,C" as well, and use the Turbo Assembler extended calling syntax
- to pass the parameters. Take a look at the examples to see how this is
- done. In general, the format of a calling sequence is:
-
- call Routine LANG, argument1, argument2, argument 3 ...
-
- Pointers that are in registers should be passed as a segment offset
- pair as in "ds si", and you must ensure all parameters are of correct
- size (words or doublewords).
-
- As mentioned above, MIDAS Sound System uses the DOS memory allocation
- routines for its memory allocation. If this does not suit you, you can
- modify the memAlloc() and memFree() routines in mmem.asm as you wish.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- MIDAS Sound System Advanced Topics Page 7
-
-
- 3. Advanced Topics
-
- ----------------------------------------------------------------------------
- 3.1. Timer Screen Synchronization
- ----------------------------------------------------------------------------
-
- 3.1.1. Introduction
-
- The MIDAS Sound System timer includes built-in support for screen
- synchronization. This means that you can program the timer to call
- your own routines every frame, more exactly immediately before the
- Vertical Retrace, immediately after the Vertical Retrace has started
- and later during the Vertical Retrace. This enables you to synchronize
- your program to the screen update to get smooth animation, which
- otherwise would not be possible with a music system playing in the
- background. The routines can also be used for changing VGA hardware
- registers, such as display start address and scrolling, in correct
- moments, for triple buffering and for compensating for different
- machine speeds.
-
- 3.1.2. Using Screen Synchronization
-
- If you wish to use timer screen synchronization, use the procedure
- outlined below:
-
- 1. BEFORE MIDAS Sound System is initialized, set up the display mode
- you are intending to use and get the timer screen synchronization
- value corresponding to that display mode using tmrGetScrSync(). If you
- are using several display modes with different refresh rates (in
- practise, different vertical resolutions, although in standard VGA
- only 240 or 480 scan line modes have different refresh rates) you must
- activate each of them in turn and get the synchronization values for
- each of them.
-
- 2. Initialize MIDAS Sound System etc.
-
- 3. Set up the display mode
-
- 4. When you need timer screen synchronization, start it using the
- function tmrSyncScr(), passing as arguments the timer screen
- synchronization value from step 1 and pointers to the routines you
- wish the timer to call. If you do not require support for some
- routine, pass a NULL pointer (dword 0) instead.
-
- 5. When timer screen synchronization is no longer required, stop it
- using tmrStopScrSync().
-
- If you change the display mode to one with a different refresh rate,
- you must first stop the screen synchronization, change the display
- mode, and after that re-synchronize the timer. Please note that
- synchronizing the timer to the screen update takes a while, and as the
- timer is disabled for that time it may introduce breaks in the music.
- Therefore we suggest you handle the timer screen synchronization
- before you start playing music.
-
-
-
-
-
-
-
-
- MIDAS Sound System Advanced Topics Page 8
-
-
- 3.1.3. Timer Screen Synchronized Routines
-
- tmrSyncScr() takes as arguments pointers to three separate functions,
- preVR(), immVR() and inVR(), which will be called at different points
- during the screen timer interrupt. Following is a brief description of
- each routine and what it is intended for.
-
- preVR() is called immediately before Vertical Retrace, and must be as
- short as possible to avoid timer synchronization problems. It is
- intended mainly for changing the display start address register and
- updating counters.
-
- immVR() is called immediately after Vertical Retrace has started, and
- must be as short as possible to avoid timer synchronization problems.
- It is intended mainly for changing VGA hardware registers that have to
- be modified during Vertical Retrace, such as pixel panning.
-
- inVR() is called after immVR(), and may take a longer time if
- necessary. However, note that even though spending a long time in
- inVR() does not induce timer synchronization problems, it may cause
- problems in music tempo if it takes a too long time. Furthermore, the
- time spent in inVR() must not exceed one frame. inVR() is mainly
- intended for changing the palette or updating small portions of
- screen, such as drawing new characters to a start address scroller.
-
- 3.1.4. Waiting for Vertical Retrace
-
- When synchronizing your program to the screen update, instead of
- waiting for Vertical Retrace using the VGA hardware registers you must
- use the screen synchronized timer for this. This is because the music
- playing interrupt may occur just during the Vertical Retrace, causing
- you to miss one frame completely. To use the timer for this, set up a
- preVR() routine that increments a frame counter, and instead of
- waiting for Vertical Retrace bit wait for the frame counter to change.
- For example:
-
- preVR:
- frameCount = frameCount + 1
-
- main:
- ...
- tmrSyncScr(scrSync, &preVR, NULL, NULL)
- ...
- oldCnt = frameCount
- while oldCnt == frameCount;
-
- Note that you must declare frameCount as "volatile" (in C) or
- otherwise ensure that the compiler will not optimize the frame waiting
- loop to an infinite one, waiting for a register variable to change.
-
- 3.1.5. Speed Compensation
-
- The timer screen synchronization can also be used to compensate for
- different speeds on different computers. The following pseudo code
- should illustrate the point:
-
-
-
-
-
-
-
- MIDAS Sound System Advanced Topics Page 9
-
-
- main loop:
- Wait for frameCount to change
- skipFrames = oldFrameCount - frameCount
- oldFrameCount = frameCount
- for i = 1 to skipFrames do
- MoveEverything
- DrawEverything
-
- ----------------------------------------------------------------------------
- 3.2. Reading Music Playing Information
- ----------------------------------------------------------------------------
-
- 3.2.1. Introduction
-
- In many applications information about the current status of the music
- player is needed. This includes, for example, music synchronization in
- demos and playing several modules after each other. This information
- can be read from the Module Players, using the GetInformation()
- function. GetInformation() takes as an argument a pointer to a
- variable where it will store a pointer to the information structure.
- The information structure is of type mpInformation, which can be found
- in mplayer.h, mplayer.inc and mplayer.pas. mpInformation in turn
- contains a pointer to the channel data structures, which are of type
- mpChanInfo.
-
- The members of the mpInformation and mpChanInfo structures should be
- self-explanatory, and are also documented in the header files.
-
- 3.2.2. Examples
-
- Borland or Watcom C:
-
- mpInformation *info;
- ...
- midasMP->GetInformation(&info);
- printf(
- ...
-
- Borland Pascal:
-
- var
- info : PmpInformation;
- MP : PModulePlayer;
- ...
- MP := midasMP;
- MP^.GetInformation(@info);
- WriteLn(info^.pos);
-
- Assembler:
- info DD ?
- ...
- les bx,[midasMP]
- call [dword es:bx+ModulePlayer.GetInformation] LANG, \
- seg info offset info
- les bx,[info]
- mov al,[es:bx+mpInformation.pos]
-
-
-
-
-
-
- MIDAS Sound System Contact Information Page 10
-
-
- 4. Contact Information
-
- If you have any questions, comments or bugs reports, or just want to
- share some thoughts about programming in general, please contact us.
- We hope that you understand that supporting a free product is not
- always very motivating, especially under heavy pressure from outside
- world like school, and so without any feedback from you the MIDAS
- project will probably not have a long life. So, whether you like MIDAS
- or not, please let us know. And if you find MIDAS useful and use it in
- your programs, a souvenir postcard from your home city would be
- nice...
-
- However, please remember: If you use MIDAS Sound System in a program
- you MUST mention it in the program and documentation.
-
- e-mail: (preferred)
- pekangas@sci.fi (Petteri Kangaslampi)
- jpaana@kauhajoki.fi (Jarno Paananen)
-
- voice:
- +358-31-3646764 (Petteri Kangaslampi)
- +358-31-3422147 (Jarno Paananen)
- Please restrict your calls to 10.00 - 21.30, Finnish time.
-
- normal mail:
- Petteri Kangaslampi
- Simeoninkuja 4
- FIN-36240 Kangasala 4
- Finland
- Europe
-
- Jarno Paananen
- Puskalantie 6
- FIN-37120 Nokia
- Finland
- Europe
-
-
- If you have a question about a particular subject, here is a list of
- which of us did what. Naturally you can contact either one of us - we
- will forward the messages as necessary.
-
- Petteri Kangaslampi:
- * General questions about MIDAS
- * MIDAS architecture, including error handling and memory
- allocation
- * Pascal version
- * * Pro Audio Spectrum, Windows Sound System and Sound Blaster
- Sound Devices
- * Mixing routines (DSM).
-
- Jarno Paananen:
- * Gravis UltraSound Sound Device
- * All three Module Players
-
-
-
-
-
-
-
-
- MIDAS Sound System Distribution Sites Page 11
-
-
- 5. Distribution Sites
-
- The latest MIDAS Sound System and MIDAS Module Player should always be
- available on these fine BBSes:
-
- WarmBoot BBS +55-194-265112
- Sysop: Carlos Henrique Cantu (WarmBooter)
-
- Moir Brandts Honk #1: +31-(0)70-3461215 USR/DS 14.4k
- #2: +31-(0)70-3457929 ZyXEL 19.2k
- #3: +31-(0)70-3452981 LineLink 14.4k
- Sysop: Hugo Voerman
-
- The Pantheon 703-378-3553 (changing soon?)
- Sysops: Farmicus [CiA], Lord Soth [iCE], and Shaggy [iCE
- Senior Staff]
-
- ULTiMAT BBS +32-2-3755651
- Sysops: Cobra, Access
-
- Sourcery BBS +46-8-7674313
- Sysop: Martin Alexanderson
- Fidonet: 2:201/406, Freq.
-
- If you are supposed to be a MIDAS distribution site, but are not on
- this list, please contact us!
-
- MIDAS and MIDP can also be found in Internet. Whenever a new version
- is released, we will try to upload it to at least ftp.cdrom.com,
- /pub/msdos/demos/incoming/music and x2ftp.oulu.fi.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- MIDAS Sound System 'Thank You's and Hellos Page 12
-
-
- 6. 'Thank You's and Hellos
-
- Otto Chrons: Thanks for the sound cards and programming information
- and optimization and debugging tips. Also special thanks for making
- DSMI so that we could know beforehand what mistakes to avoid.
-
- Teemu Kalvas: Thanks for testing all the zillions of buggy versions of
- MIDAS. Without you MIDAS would not be nearly as stable as it is now.
- Also thanks for your ideas and thoughtful feedback and numerous
- optimization and general design ideas.
-
- Ben Cooley: Thanks for porting MIDAS Sound System to Windows and sorry
- we have not kept in touch with you. Good luck with porting this
- version.
-
- Stratos, Legend, Yolk etc.: Thanks for composing the way you do.
-
- Everybody who has offered us feedback regarding MIDAS Sound System:
- Thank you, and please keep the bug reports coming.
-
- MIDAS Sound System Distribution Site sysops: Thanks for your support,
- and please excuse us for forgetting some of you.
-
- Everybody at class 3K at Tampereen lyseon lukio: Thanks for putting up
- with us and being such nice people. IB has been painful enough this
- way, not to think what it might been with some other classmates.
-
- Plus some traditional hi-hos to:
- Tomi Henttonen
- Olli Hinkka
- Kari-Pekka Koljonen
- jmagic (forget Phantom's GUS player!)
- All Virtual Visions members
- All Parallax members
- @ (stupid group name BTW)
- CNCD
- Complex
- Inapt
- Prime
- Virtual Dreams
- Bloodhouse
- Terramarque Software
- Bart, Dean, Delorean, Destop, Dizzy, Dr. Jekyll, Dr. Skull,
- Dweezil, Eksec, Fraction, Groo, Hannibal, Heatbeat, Jugi, Vesa
- Karvonen, Peter Kunath, Marley, Murk, Pauli Porkka, Henryk
- Richter, Shayera, Stalker, Tsunami, WDO
-
- And everybody we forgot.
-
-
-
-
-
-
-
-
-
-
-
-
-